﻿#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDebug>
#include <QFile>
#include <QTimer>

typedef struct
{
    uint8_t time_outflag;
} timer_info;

// 开始QT命名空间定义
QT_BEGIN_NAMESPACE
// 声明一个名为Ui的命名空间，其中包含一个类MainWindow的声明
namespace Ui
{
    class MainWindow;
}
QT_END_NAMESPACE

/**
 * @brief 主窗口类，继承自QMainWindow
 *
 * 该类用于创建应用程序的主窗口，管理窗口中的各种控件和串口通信
 */
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     *
     * 初始化主窗口，包括窗口内的控件和串口设置
     *
     * @param parent 父控件指针，用于确定窗口的父子关系
     */
    MainWindow(QWidget *parent = nullptr);

    /**
     * @brief 析构函数
     *
     * 释放主窗口资源，确保串口正确关闭
     */
    ~MainWindow();
    QTimer *timer_u_s;
    QTimer *timer_67_f;
    QTimer *timer_start_t;

private slots:
    /**
     * @brief 按钮5点击事件处理函数
     *
     * 该函数用于处理按钮5被点击后的行为
     */
    void on_pushButton_5_clicked();

    /**
     * @brief 按钮1点击事件处理函数
     *
     * 该函数用于处理按钮1被点击后的行为
     */
    void on_pushButton_clicked();

    /**
     * @brief 按钮2点击事件处理函数
     *
     * 该函数用于处理按钮2被点击后的行为
     */
    void on_pushButton_2_clicked();

    /**
     * @brief 数据接收处理函数
     *
     * 该函数用于处理接收到的串口数据
     */
    void data_receive();

    void on_comboBox_6_activated(int index);

    void timer_out_uart_status_fun(void);

    void timer_out_67_fault_fun(void);

    void timer_out_start_test_fun(void);

    void on_pushButton_6_clicked();

private:
    /**
     * @brief UI对象指针
     *
     * 用于操作窗口内的各种控件
     */
    Ui::MainWindow *ui;

    /**
     * @brief 串口对象指针
     *
     * 用于管理串口通信
     */
    QSerialPort *serial = new QSerialPort;

    /**
     * @brief 串口设置函数
     *
     * 用于初始化和配置串口参数
     */
    void Serial_Set();
    QByteArray uart_buffer; // 缓冲区，用于存储接收到的数据
    QFile file;
};
void set_ui_QTable_xy(uint8_t x, uint8_t y);
void set_ui_QTable_content(uint8_t x, uint8_t y, QString text);
void set_ui_QTable_close(void);
void time_ruart_status_start_stop(uint8_t st, uint32_t var);
void time_67_fault_start_stop(uint8_t st, uint32_t var);
void timer_info_init(void);
void set_timer_outflag(uint8_t time_outflag);
uint8_t rt_timer_outflag(void);
void set_pushButton_6_Enabled(bool st);
void set_ui_QTable_content_iseditable(uint8_t x, uint8_t y ,bool iseditable);
uint32_t rt_QTable_value(uint8_t x, uint8_t y);
#endif // MAINWINDOW_H
